package org.company.ci.services;

import java.util.ArrayList;

import org.company.ci.daos.ProductoDao;
import org.company.ci.daos.RelacionProductoProveedorDao;
import org.company.ci.domain.Producto;
import org.company.ci.domain.RelacionProductoProveedor;

public class ProductoService {
	
	private ProductoDao productoDao;
	
	private RelacionProductoProveedorDao relacionProductoProveedorDao;
	
	public void saveOrEditProducto(Producto producto) throws Exception {
		if (producto.getIdProducto() == null) {
			productoDao.saveEntity(producto);
		} else {
			productoDao.updateEntity(producto);
		}
	}
	
	public Producto getProductoById(Long idProducto) throws Exception {
		return productoDao.getBObyId(idProducto.toString(), "idProducto");
	}
	
	public void eliminarProducto(Producto producto) throws Exception {
		isUsedProducto(producto);
		productoDao.deleteEntity(producto);
	}
	
	private void isUsedProducto(Producto producto) throws Exception {
		RelacionProductoProveedor rel = relacionProductoProveedorDao
				.getBObyLongField(producto.getIdProducto(), "producto.idProducto");
		if (rel != null) {
			throw new Exception("No se puede eliminar el Producto porque esta siendo usado por un Proveedor.");
		}
	}
	public ArrayList<Producto> getListaProductos() throws Exception {
		return (ArrayList<Producto>) productoDao.getAllEntity("");
	}

	public ProductoDao getProductoDao() {
		return productoDao;
	}

	public void setProductoDao(ProductoDao productoDao) {
		this.productoDao = productoDao;
	}

	public RelacionProductoProveedorDao getRelacionProductoProveedorDao() {
		return relacionProductoProveedorDao;
	}

	public void setRelacionProductoProveedorDao(
			RelacionProductoProveedorDao relacionProductoProveedorDao) {
		this.relacionProductoProveedorDao = relacionProductoProveedorDao;
	}
	

}
